home *** CD-ROM | disk | FTP | other *** search
- /*
- * The contents of this file are subject to the Mozilla Public
- * License Version 1.1 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS
- * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
- * implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Code is mozilla.org code.
- *
- * The Initial Developer of the Original Code is Netscape
- * Communications Corporation. Portions created by Netscape are
- * Copyright (C) 2001 Netscape Communications Corporation. All
- * Rights Reserved.
- *
- * Contributor(s):
- * Bob Lord <lord@netscape.com>
- * Ian McGreer <mcgreer@netscape.com>
- */
-
- const nsIFilePicker = Components.interfaces.nsIFilePicker;
- const nsFilePicker = "@mozilla.org/filepicker;1";
- const nsIX509CertDB = Components.interfaces.nsIX509CertDB;
- const nsX509CertDB = "@mozilla.org/security/x509certdb;1";
- const nsIX509Cert = Components.interfaces.nsIX509Cert;
- const nsICertTree = Components.interfaces.nsICertTree;
- const nsCertTree = "@mozilla.org/security/nsCertTree;1";
- const nsIDialogParamBlock = Components.interfaces.nsIDialogParamBlock;
- const nsDialogParamBlock = "@mozilla.org/embedcomp/dialogparam;1";
- const nsIPKIParamBlock = Components.interfaces.nsIPKIParamBlock;
- const nsPKIParamBlock = "@mozilla.org/security/pkiparamblock;1";
-
-
- var key;
-
- var selected_certs = [];
- var certdb;
-
- var caTreeView;
- var serverTreeView;
- var emailTreeView;
- var userTreeView;
-
- function LoadCerts()
- {
- certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
-
- caTreeView = Components.classes[nsCertTree]
- .createInstance(nsICertTree);
- caTreeView.loadCerts(nsIX509Cert.CA_CERT);
- document.getElementById('ca-tree')
- .treeBoxObject.view = caTreeView;
-
- serverTreeView = Components.classes[nsCertTree]
- .createInstance(nsICertTree);
- serverTreeView.loadCerts(nsIX509Cert.SERVER_CERT);
- document.getElementById('server-tree')
- .treeBoxObject.view = serverTreeView;
-
- emailTreeView = Components.classes[nsCertTree]
- .createInstance(nsICertTree);
- emailTreeView.loadCerts(nsIX509Cert.EMAIL_CERT);
- document.getElementById('email-tree')
- .treeBoxObject.view = emailTreeView;
-
- userTreeView = Components.classes[nsCertTree]
- .createInstance(nsICertTree);
- userTreeView.loadCerts(nsIX509Cert.USER_CERT);
- document.getElementById('user-tree')
- .treeBoxObject.view = userTreeView;
-
- var rowCnt = userTreeView.rowCount;
- var enableBackupAllButton=document.getElementById('mine_backupAllButton');
- if(rowCnt < 1) {
- enableBackupAllButton.setAttribute("disabled",true);
- } else {
- enableBackupAllButton.setAttribute("enabled",true);
- }
-
-
- var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
- var verifiedColText;
- if (certdb.ocspOn) {
- verifiedColText = bundle.GetStringFromName("certmgr.verifiedNoOCSP");
- } else {
- verifiedColText = bundle.GetStringFromName("certmgr.verified");
- }
- var verifiedCol = document.getElementById('verifiedcol');
- verifiedCol.setAttribute('label', verifiedColText);
- }
-
- function ReloadCerts()
- {
- caTreeView.loadCerts(nsIX509Cert.CA_CERT);
- serverTreeView.loadCerts(nsIX509Cert.SERVER_CERT);
- emailTreeView.loadCerts(nsIX509Cert.EMAIL_CERT);
- userTreeView.loadCerts(nsIX509Cert.USER_CERT);
- }
-
- function getSelectedTab()
- {
- var selTab = document.getElementById('certMgrTabbox').selectedItem;
- var selTabID = selTab.getAttribute('id');
- if (selTabID == 'mine_tab') {
- key = "my_certs";
- } else if (selTabID == "others_tab") {
- key = "others_certs";
- } else if (selTabID == "websites_tab") {
- key = "web_certs";
- } else if (selTabID == "ca_tab") {
- key = "ca_certs";
- }
- return key;
- }
-
-
- function doHelpButton() {
- var uri = getSelectedTab();
- openHelp(uri);
- }
-
-
- function getSelectedCerts()
- {
- var ca_tab = document.getElementById("ca_tab");
- var mine_tab = document.getElementById("mine_tab");
- var others_tab = document.getElementById("others_tab");
- var websites_tab = document.getElementById("websites_tab");
- var items = null;
- if (ca_tab.selected) {
- items = caTreeView.selection;
- } else if (mine_tab.selected) {
- items = userTreeView.selection;
- } else if (others_tab.selected) {
- items = emailTreeView.selection;
- } else if (websites_tab.selected) {
- items = serverTreeView.selection;
- }
- selected_certs = [];
- var cert = null;
- var nr = 0;
- if (items != null) nr = items.getRangeCount();
- if (nr > 0) {
- for (var i=0; i<nr; i++) {
- var o1 = {};
- var o2 = {};
- items.getRangeAt(i, o1, o2);
- var min = o1.value;
- var max = o2.value;
- for (var j=min; j<=max; j++) {
- if (ca_tab.selected) {
- cert = caTreeView.getCert(j);
- } else if (mine_tab.selected) {
- cert = userTreeView.getCert(j);
- } else if (others_tab.selected) {
- cert = emailTreeView.getCert(j);
- } else if (websites_tab.selected) {
- cert = serverTreeView.getCert(j);
- }
- if (cert)
- selected_certs[selected_certs.length] = cert;
- }
- }
- }
- }
-
- function ca_enableButtons()
- {
- var items = caTreeView.selection;
- var nr = items.getRangeCount();
- var toggle="false";
- if (nr == 0) {
- toggle="true";
- }
- var edit_toggle=toggle;
- /*
- var edit_toggle="true";
- if (nr > 0) {
- for (var i=0; i<nr; i++) {
- var o1 = {};
- var o2 = {};
- items.getRangeAt(i, o1, o2);
- var min = o1.value;
- var max = o2.value;
- var stop = false;
- for (var j=min; j<=max; j++) {
- var tokenName = items.tree.view.getCellText(j, "tokencol");
- if (tokenName == "Builtin Object Token") { stop = true; } break;
- }
- if (stop) break;
- }
- if (i == nr) {
- edit_toggle="false";
- }
- }
- */
- var enableViewButton=document.getElementById('ca_viewButton');
- enableViewButton.setAttribute("disabled",toggle);
- var enableEditButton=document.getElementById('ca_editButton');
- enableEditButton.setAttribute("disabled",edit_toggle);
- var enableDeleteButton=document.getElementById('ca_deleteButton');
- enableDeleteButton.setAttribute("disabled",toggle);
- }
-
- function mine_enableButtons()
- {
- var items = userTreeView.selection;
- var toggle="false";
- if (items.getRangeCount() == 0) {
- toggle="true";
- }
- var enableViewButton=document.getElementById('mine_viewButton');
- enableViewButton.setAttribute("disabled",toggle);
- var enableBackupButton=document.getElementById('mine_backupButton');
- enableBackupButton.setAttribute("disabled",toggle);
- var enableDeleteButton=document.getElementById('mine_deleteButton');
- enableDeleteButton.setAttribute("disabled",toggle);
- }
-
- function websites_enableButtons()
- {
- var items = serverTreeView.selection;
- var toggle="false";
- if (items.getRangeCount() == 0) {
- toggle="true";
- }
- var enableViewButton=document.getElementById('websites_viewButton');
- enableViewButton.setAttribute("disabled",toggle);
- var enableEditButton=document.getElementById('websites_editButton');
- enableEditButton.setAttribute("disabled",toggle);
- var enableDeleteButton=document.getElementById('websites_deleteButton');
- enableDeleteButton.setAttribute("disabled",toggle);
- }
-
- function email_enableButtons()
- {
- var items = emailTreeView.selection;
- var toggle="false";
- if (items.getRangeCount() == 0) {
- toggle="true";
- }
- var enableViewButton=document.getElementById('email_viewButton');
- enableViewButton.setAttribute("disabled",toggle);
- var enableDeleteButton=document.getElementById('email_deleteButton');
- enableDeleteButton.setAttribute("disabled",toggle);
- }
-
- function backupCerts()
- {
- getSelectedCerts();
- var numcerts = selected_certs.length;
- var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
- var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
- fp.init(window,
- bundle.GetStringFromName("chooseP12BackupFileDialog"),
- nsIFilePicker.modeSave);
- fp.appendFilter("PKCS12 Files", "*.p12");
- fp.appendFilters(nsIFilePicker.filterAll);
- var rv = fp.show();
- if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
- certdb.exportPKCS12File(null, fp.file,
- selected_certs.length, selected_certs);
- }
- }
-
- function backupAllCerts()
- {
- // Select all rows, then call doBackup()
- var items = userTreeView.selection.selectAll();
- backupCerts();
- }
-
- function editCerts()
- {
- getSelectedCerts();
- var numcerts = selected_certs.length;
- for (var t=0; t<numcerts; t++) {
- var cert = selected_certs[t];
- var certkey = cert.dbKey;
- var ca_tab = document.getElementById("ca_tab");
- if (ca_tab.selected) {
- window.openDialog('chrome://pippki/content/editcacert.xul', certkey,
- 'chrome,width=100,resizable=1,modal');
- } else {
- window.openDialog('chrome://pippki/content/editsslcert.xul', certkey,
- 'chrome,width=100,resizable=1,modal');
- }
- }
- }
-
- function restoreCerts()
- {
- var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
- var fp = Components.classes[nsFilePicker].createInstance(nsIFilePicker);
- fp.init(window,
- bundle.GetStringFromName("chooseP12RestoreFileDialog"),
- nsIFilePicker.modeOpen);
- fp.appendFilter("PKCS12 Files", "*.p12;*.pfx");
- fp.appendFilters(nsIFilePicker.filterAll);
- if (fp.show() == nsIFilePicker.returnOK) {
- var certdb = Components.classes[nsX509CertDB].getService(nsIX509CertDB);
- certdb.importPKCS12File(null, fp.file);
- }
- userTreeView.loadCerts(nsIX509Cert.USER_CERT);
- }
-
- function deleteCerts()
- {
- getSelectedCerts();
-
- var params = Components.classes[nsDialogParamBlock].createInstance(nsIDialogParamBlock);
-
- var bundle = srGetStrBundle("chrome://pippki/locale/pippki.properties");
- var selTab = document.getElementById('certMgrTabbox').selectedItem;
- var selTabID = selTab.getAttribute('id');
- var numcerts = selected_certs.length;
-
- params.SetNumberStrings(numcerts+1);
-
- if (selTabID == 'mine_tab')
- {
- params.SetString(0,bundle.GetStringFromName("deleteUserCertFlag"));
- }
- else if (selTabID == "websites_tab")
- {
- params.SetString(0,bundle.GetStringFromName("deleteSslCertFlag"));
- }
- else if (selTabID == "ca_tab")
- {
- params.SetString(0,bundle.GetStringFromName("deleteCaCertFlag"));
- }
- else if (selTabID == "others_tab")
- {
- params.SetString(0,bundle.GetStringFromName("deleteEmailCertFlag"));
- }
- else
- {
- return;
- }
-
- params.SetInt(0,numcerts);
- for (var t=0; t<numcerts; t++)
- {
- var cert = selected_certs[t];
- params.SetString(t+1, cert.dbKey);
- }
-
- window.openDialog('chrome://pippki/content/deletecert.xul', "",
- 'chrome,resizable=1,modal',params);
-
- ReloadCerts();
- }
-
- function viewCerts()
- {
- getSelectedCerts();
- var numcerts = selected_certs.length;
- for (var t=0; t<numcerts; t++) {
- selected_certs[t].view();
- }
- }
-
- /* XXX future - import a DER cert from a file? */
- function addCerts()
- {
- alert("Add cert chosen");
- }
-